博客
关于我
实验三:STM32使用固件库点亮LED
阅读量:400 次
发布时间:2019-03-05

本文共 3418 字,大约阅读时间需要 11 分钟。

编程要点

1)使能GPIO端口时钟;

2)初始化GPIO目标引脚为推挽输出模式
3)控制GPIO引脚输出高低,电平。

bsp_led.h文件

#ifndef T_LED_H_#define T_LED_H_#include "stm32f10x.h"//R-红色#define LED1_GPIO_PORT			GPIOB#define LED1_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED1_GPIO_PIN			GPIO_Pin_5//G-绿色#define LED2_GPIO_PORT			GPIOB#define LED2_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED2_GPIO_PIN			GPIO_Pin_0//B-蓝色#define LED3_GPIO_PORT			GPIOB#define LED3_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED3_GPIO_PIN			GPIO_Pin_1

以上代码分别把控制LED灯的GPIO端口,GPIO引脚号以及GPIO端口时钟封装起来了。在实际控制的时候我们就可以直接使用这些宏,以达到应用代码与硬件无关的效果。

/*直接操作寄存器的方法控制IO*/#define digitalHi(p,i)              {p->BSRR=i;}//输出高电平#define digitalLo(p,i)              {p->BRR=i;}//输出低电平#define digitalToggle(p,i)          {p->ODR^=i;}//输出反转状态/*定义控制IO的宏*/#define LED1_TOGGLE					digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯反转#define LED1_OFF					digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯灭#define LED1_ON						digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯亮#define LED2_TOGGLE					digitalToggle(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯反转#define LED2_OFF					digitalHi(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯灭#define LED2_ON						digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯亮#define LED3_TOGGLE					digitalToggle(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯反转#define LED3_OFF					digitalHi(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯灭#define LED3_ON						digitalLo(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯亮//红#define LED_RED		         		LED1_ON;LED2_OFF;LED3_OFF		//红#define LED_GREEN 	 				LED1_OFF;LED2_ON;LED3_OFF		//绿#define LED_BLUE    				LED1_OFF;LED2_OFF;LED3_ON      //蓝#define LED_YELLOW 					LED1_ON;LED2_ON;LED3_OFF       //黄#define LED_PURPLE  				LED1_ON;LED2_OFF;LED3_ON       //紫#define LED_CYAN        			LED1_OFF;LED2_ON;LED3_ON       //青#define LED_WHITE  	    			LED1_ON;LED2_ON;LED3_ON        //白#define LED_RGBOFF 	     			LED1_OFF;LED2_OFF;LED3_OFF     //黑void LED_GPIO_Config(void);#endif /*T_LED_H_*/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bsp_led.c文件:

#include "bsp_led.h"void LED_GPIO_Config(void){   				//定义一个GPIO_InitTypeDef类型的结构体变量		GPIO_InitTypeDef GPIO_InitStructure;		//开启LED相关的GPIO外设时钟		RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);			//选择引脚模式为通用推挽输出		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   		//设置引脚速率为50MHz		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 		//选择要控制的GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);			//初始化GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);		//初始化GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);		//关灯		GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);		//关灯		GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);	     	//关灯		GPIO_SetBits(LED3_GPIO_PORT, LED3_GPIO_PIN);}

Main.c文件

#include "stm32f10x.h"#include "bsp_led.h"#define SOFT_DELAY Delay(0x0FFFFF);void Delay(__IO u32 nCount); int main(void){   		/*LED端口初始化*/	LED_GPIO_Config();	 	while (1)	{   		LED1_ON;			 		SOFT_DELAY;		LED1_OFF;		   		LED2_ON;			 		SOFT_DELAY;		LED2_OFF;		 		LED3_ON;			 		SOFT_DELAY;		LED3_OFF;		  		/*轮流显示,红绿蓝黄紫青白*/		LED_RED;		SOFT_DELAY;				LED_GREEN;		SOFT_DELAY;				LED_BLUE;		SOFT_DELAY;				LED_YELLOW;		SOFT_DELAY;				LED_PURPLE;		SOFT_DELAY;						LED_CYAN;		SOFT_DELAY;				LED_WHITE;		SOFT_DELAY;				LED_RGBOFF;		SOFT_DELAY;			}}void Delay(__IO uint32_t nCount)	 //延时函数{   	for(; nCount != 0; nCount--);}

LED电路连接图

在这里插入图片描述

程序下载验证:

在这里插入图片描述

转载地址:http://zdpzz.baihongyu.com/

你可能感兴趣的文章
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>